package com.ywt.cda.core.dao.page;

import org.apache.ibatis.session.RowBounds;

/**
 * Mybatis分页参数及查询结果封装. 注意所有序号从1开始.
 * 
 * @param Page中记录的类型
 *            .
 * @author StarZou
 * @since 2014年5月18日 下午1:34:32
 **/
public class Page extends RowBounds {

	// 结果集
	private Object result;
	// --分页参数 --//
	/**
	 * 页编号 : 第几页
	 */
	private int pageNo = 1;
	/**
	 * 页大小 : 每页的数量
	 */
	private int pageSize = 10;

	/**
	 * 偏移量 : 第一条数据在表中的位置
	 */
	private int pageOffset;

	/**
	 * 限定数 : 每页的数量
	 */
	private int pageLimit;

	/**
	 * 总条数
	 */
	private int totalCount;

	/**
	 * 总页数
	 */
	private int totalPages;

	// -- 构造函数 --//
	public Page() {
	}

	public Page(int pageNo, int pageSize) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
	}

	// -- 访问查询参数函数 --//
	/**
	 * 获得当前页的页号,序号从1开始,默认为1.
	 */
	public int getPageNo() {
		return pageNo;
	}

	/**
	 * 获得每页的记录数量,默认为1.
	 */
	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 根据pageNo和pageSize计算当前页第一条记录在总结果集中的位置,序号从1开始.
	 */
	public int getFirst() {
		return ((pageNo - 1) * pageSize) + 1;
	}

	public int getPageOffset() {
		return ((pageNo - 1) * pageSize);
	}

	/**
	 * 根据pageNo和pageSize计算当前页第一条记录在总结果集中的位置,序号从0开始.
	 */
	public void setPageOffset(int pageOffset) {
		this.pageOffset = pageOffset;
	}

	public int getPageLimit() {
		return pageSize;
	}

	public void setPageLimit(int pageLimit) {
		this.pageLimit = pageLimit;
	}

	/**
	 * 取得总记录数, 默认值为-1.
	 */
	public int getTotalCount() {
		return totalCount;
	}

	/**
	 * 设置总记录数.
	 */
	public void setTotalCount(final int totalCount) {
		this.totalCount = totalCount;
		this.totalPages = this.getTotalPages();
	}

	/**
	 * 根据pageSize与totalCount计算总页数, 默认值为-1.
	 */
	public int getTotalPages() {
		if (totalCount < 0) {
			return -1;
		}
		int pages = totalCount / pageSize;
		return totalCount % pageSize > 0 ? ++pages : pages;
	}

	public void setTotalPages(int totalPages) {
		this.totalPages = totalPages;
	}

	public Object getResult() {
		return result;
	}

	public void setResult(Object result) {
		this.result = result;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
		this.pageLimit = pageSize;
	}

}
